package com.hnyfkj.jyindustry.biz.parameter.service.impl;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hnyfkj.jyindustry.biz.parameter.dao.ParameterDao;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterDto;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterInsertDto;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterQueryDto;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterReturn;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterTypeDto;
import com.hnyfkj.jyindustry.biz.parameter.dto.ParameterUpdateDto;
import com.hnyfkj.jyindustry.biz.parameter.entity.ParameterEntity;
import com.hnyfkj.jyindustry.biz.parameter.service.ParameterService;
import com.hnyfkj.jyindustry.common.exception.HnyfkjBusinessException;
import com.hnyfkj.jyindustry.common.utils.PageUtils;

/**
 * @author zjq
 *
 * @Description
 *
 * @date 2020年12月21日
 */
@Service("ParameterService")
public class ParameterServiceImpl extends ServiceImpl<ParameterDao, ParameterEntity> implements ParameterService {
	@Autowired
	private ParameterDao parameterDao;

	@Override
	public List<ParameterTypeDto> getParameterType(ParameterTypeDto parameterTypeDto) {
		return parameterDao.getParameterType(parameterTypeDto);
	}
	
	@Override
	public String getSysParameter(String paramType) {
		return parameterDao.getSysParameter(paramType);
	}

	@Override
	public List<ParameterDto> getParameter(ParameterDto parameterDto) {
		return parameterDao.getParameter(parameterDto);
	}

	@Override
	public int insert(ParameterInsertDto parameterInsertDto) {
		final ParameterEntity parameterEntity = new ParameterEntity();
		ParameterEntity parameter = new ParameterEntity();
		parameter.setParameterName(parameterInsertDto.getParameterName());
		parameter.setParameterType(parameterInsertDto.getParameterType());
		parameter = parameterDao.selectOne(new QueryWrapper<ParameterEntity>(parameter));
		if (!StringUtils.isEmpty(parameter)) {
			throw new HnyfkjBusinessException("参数名称已存在");
		}
		BeanUtils.copyProperties(parameterInsertDto, parameterEntity);
		parameterEntity.setModifyTime(LocalDateTime.now());
		parameterEntity.setTypeName(getParameterTypeName(parameterInsertDto.getParameterType()));
		return parameterDao.insert(parameterEntity);
	}

	@Override
	public int update(ParameterUpdateDto parameterUpdateDto) {
		// 验证参数是否在用
		final ParameterEntity parameterEntity = parameterDao.selectById(parameterUpdateDto.getId());
		ParameterEntity parameter = new ParameterEntity();
		parameter.setParameterName(parameterUpdateDto.getParameterName());
		ParameterEntity parameters = parameterDao.selectById(parameterUpdateDto.getId());
		parameter.setParameterType(parameters.getParameterType());
		parameter = parameterDao.selectOne(new QueryWrapper<ParameterEntity>(parameter));
		if (parameter != null && !parameter.getId().equals(parameterUpdateDto.getId())) {
			throw new HnyfkjBusinessException("参数名称已存在");
		}
		BeanUtils.copyProperties(parameterUpdateDto, parameterEntity);
		parameterEntity.setModifyTime(LocalDateTime.now());
		return parameterDao.updateById(parameterEntity);
	}

	@Override
	public int delectBatch(String[] ids) {
		// 验证参数是否在用
		return parameterDao.deleteBatchIds(Arrays.asList(ids));
	}

	@Override
	public String getParameterTypeName(String ParameterType) {
		return parameterDao.getParameterTypeName(ParameterType);
	}

	@Override
	public PageUtils<ParameterReturn> selectListDto(ParameterQueryDto queryDto) {
		PageHelper.startPage(queryDto.getPage(), queryDto.getLimit());		
		PageInfo<ParameterReturn> pageInfo = new PageInfo<>(parameterDao.selectListDto(queryDto));
		return PageUtils.pageOf(pageInfo);
	}
}
